<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>组件化构建应用</title>
    <!-- 1.引入本地资源-->
    <script src="../js/vue-dev.js"></script>
    <!-- 2.引入外部资源-->
    <!--<script src="https://unpkg.com/vue"></script>-->
</head>

<!--
1、Vue组件系统，允许我们使用小型的、自包含的、通常可复用的组件构建大型应用；
2、可以把一个任意类型的应用界面 抽象为 一个组件树；
3、在Vue中，一个组件本质上是一个拥有预定义选项的Vue实例；

-->
<body>
    <!-- 视图层 -->
    <div id="app_template">
        <ol>
            <!--
              现在我们为每个 todo-item 提供待办项对象
              待办项对象是变量，即其内容可以是动态的。
              我们也需要为每个组件提供一个“key”，晚些时候我们会做个解释。
            -->
            <todo-item
                    v-for="item in groceryList"
                    v-bind:todo="item"
                    v-bind:key="item.id">
            </todo-item>
        </ol>
        <ol>
            <!--
                传统的方式，上面是利用组件的形式
            -->
            <li v-for="item in groceryList">
                {{item.id}}==>{{item.text}}
            </li>
        </ol>
    </div>



    <!-- 模型层 -->
    <script>
        /*
             1、这只是一个假设的例子，
             但是我们已经设法将应用分割成了两个更小的单元，
             子单元通过 props(定义组件的属性)接口实现了与父单元很好的解耦；
             2、在这种模式下，给子单元进行更复杂的模板和逻辑的改进，不会影响到父单元；
             3、在一个大型应用中，有必要将整个应用程序划分为组件，以使开发可管理；
             4、Vue 组件提供了纯自定义元素所不具备的一些重要功能，
                最突出的是 跨组件数据流，自定义事件通信 以及 构建工具集成 ；
         */
        Vue.component('todo-item', {
            props: ['todo'],
            template: '<li>{{ todo.text }}</li>'
        });

        var app_template = new Vue({
            el: '#app_template',
            data: {
                groceryList: [
                    { id: 0, text: '蔬菜' },
                    { id: 1, text: '奶酪' },
                    { id: 2, text: '随便其他什么人吃的东西' }
                ]
            }
        })
    </script>

</body>

</html>